package com.vilen.learn.java7.V3_1;

import java.util.ArrayList;
import java.util.List;
import com.google.inject.Inject;

/**
 * Created by vilen on 2017/9/23.
 *
 *
 松耦合——HollywoodService不再依赖于AgentFinder的具体类来完成工作。
 可测性——为了测试HollywoodService类，你可以注入一个返回固定数量经纪人的基本Java类（比如POJOAgentFinder），
    这在测试驱动的开发中被称为存根类。这对于单元测试来说非常完美，因为你不再需要Web服务、电子表格或其他第三方实现之类的东西。
 更强的内聚性——你的代码不用再和工厂打交道，不用四下里去抓依赖项，只需要执行业务逻辑。
 可重用的组件——假如有个开发人员想用你的API，现在需要注入一个他们定制的AgentFinder实现类，就说JDBCAgentFinder吧，想象一下他轻松惬意的表情吧。
 更轻盈的代码——HollywoodServiceJSR330中的代码量与最初的HollywoodService相比明显减少了很多。
 */
public class HollywoodServiceJSR330 {
    @Inject
    public static List<Agent> getFriendlyAgents(AgentFinder finder) {
        List<Agent> agents = finder.findAllAgents();
        List<Agent> friendlyAgents = filterAgents(agents, "Java Developers");
        return friendlyAgents;
    }

    public static List<Agent> filterAgents(List<Agent> agents, String agentType) {
        List<Agent> filteredAgents = new ArrayList<>();
        for (Agent agent : agents) {
            if (agent.getType().equals("Java Developers")) {
                filteredAgents.add(agent);
            }
        }
        return filteredAgents;
    }
}
